package visao;

import modelo.Cliente;
import modelo.Funcionario;
import modelo.Time;
import controle.ControleCliente;
import controle.ControleTime;
import modelo.Localizacao;
import auxiliar.Data;
import auxiliar.Ramdom;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.text.JTextComponent;
import javax.swing.text.MaskFormatter;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JMenuItem;
import javax.swing.JSpinner;
import javax.swing.JMenuBar;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.UIManager;

import java.awt.Scrollbar;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JRadioButton;

import controle.ControleCliente;
import de.javasoft.plaf.synthetica.SyntheticaBlackEyeLookAndFeel;
import de.javasoft.plaf.synthetica.SyntheticaSimple2DLookAndFeel;
/**
 * 
 * @author  fernando_henrique
 * 
 * Classe de vis@@o Cadastro de Cliente
 */
public class CadastroCliente extends JFrame {
    
	private JPanel contentPane;
	private JTextField txtNome;
	private JTextField txtSobrenome;
	private JTextField txtCpf;
	private JTextField txtDataNascimento;
	private JTextField txtEmail;
	private JTextField txtRua;
	private JTextField txtNumero;
	private JTextField txtBairro;
	private JTextField txtCidade;
	private JTextField txtTelefone;
	private JTextField txtCep;
	private ControleCliente controle = new ControleCliente();
	private Localizacao localizacao = new Localizacao();
	private Cliente cliente = new Cliente();
	private Time time = new Time();
	private Ramdom gerarSenhas = new Ramdom();
	private JRadioButton rdbtnMasculino;
	private JRadioButton rdbtnFeminino;
	private boolean sexo;
	private JComboBox comboBoxTime;
	private JButton btnBuscar;
	private JButton btnExcluir;
	private JComboBox cboxEstado;
	private JButton btnCadastrar;
	private Funcionario funcionario;

	/**
         * Metodo para abrir a tela
         * 
         * @param status
         * @param funcionario 
         */
	protected void abreTela(int status, Funcionario funcionario) {
		this.funcionario = funcionario;
		ControleTime controleTime = new ControleTime();
		Time time = null;
		List<Time> times = new ArrayList<Time>();

		times = controleTime.buscarTodos();
		for (int i = 0; i < times.size(); i++) {
			comboBoxTime.addItem(times.get(i));
		}
		btnExcluir.setEnabled(false);
		btnCadastrar.setEnabled(false);
		txtBairro.setEditable(false);
		comboBoxTime.setEnabled(false);
		txtCep.setEditable(false);
		txtCidade.setEditable(false);
		txtDataNascimento.setEditable(false);
		txtEmail.setEditable(false);
		txtNome.setEditable(false);
		txtNumero.setEditable(false);
		txtRua.setEditable(false);

		txtSobrenome.setEditable(false);
		txtTelefone.setEditable(false);
		cboxEstado.setEnabled(false);
		rdbtnFeminino.setEnabled(false);
		rdbtnMasculino.setEnabled(false);

	}
        /**
         * 
         * @param args metodo main da tela
         */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					UIManager.setLookAndFeel(new SyntheticaSimple2DLookAndFeel());
					CadastroCliente frame = new CadastroCliente();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

		});
	}

	/**
	 * Cria@@@@o de frame.
	 */
	public CadastroCliente() {
		setTitle("Cadastro de Cliente");

		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 489, 544);

		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JLabel lblNome = new JLabel("Nome");
		lblNome.setBounds(33, 71, 72, 14);
		contentPane.add(lblNome);

		JLabel lblSobrenome = new JLabel("Sobrenome");
		lblSobrenome.setBounds(33, 137, 103, 14);
		contentPane.add(lblSobrenome);

		JLabel lblRua = new JLabel("Rua");
		lblRua.setBounds(291, 202, 46, 14);
		contentPane.add(lblRua);

		JLabel lblCep = new JLabel("Cep");
		lblCep.setBounds(291, 327, 46, 14);
		contentPane.add(lblCep);

		JLabel lblCpf = new JLabel("CPF");
		lblCpf.setBounds(33, 202, 46, 14);
		contentPane.add(lblCpf);

		JLabel lblCidade = new JLabel("Cidade\r\n");
		lblCidade.setBounds(291, 71, 82, 14);
		contentPane.add(lblCidade);

		JLabel lblEmail = new JLabel("EMAIL");
		lblEmail.setBounds(33, 327, 46, 14);
		contentPane.add(lblEmail);

		JLabel lblTelefone = new JLabel("Telefone");
		lblTelefone.setBounds(291, 265, 65, 14);
		contentPane.add(lblTelefone);

		JLabel lblDataDeNascimento = new JLabel("Data de Nascimento");
		lblDataDeNascimento.setBounds(33, 265, 124, 14);
		contentPane.add(lblDataDeNascimento);

		JLabel lblNumer = new JLabel("Numero");
		lblNumer.setBounds(425, 202, 65, 14);
		contentPane.add(lblNumer);

		JLabel lblBairro = new JLabel("Bairro");
		lblBairro.setBounds(291, 137, 65, 14);
		contentPane.add(lblBairro);

		txtNome = new JTextField();
		txtNome.setBounds(33, 84, 166, 20);
		contentPane.add(txtNome);
		txtNome.setColumns(10);

		txtSobrenome = new JTextField();
		txtSobrenome.setBounds(33, 148, 166, 20);
		contentPane.add(txtSobrenome);
		txtSobrenome.setColumns(10);

		try {
			txtCpf = new JFormattedTextField(
					new MaskFormatter("###.###.###-##"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		txtCpf.setBounds(33, 213, 166, 20);
		contentPane.add(txtCpf);
		txtCpf.setColumns(10);

		try {
			txtDataNascimento = new JFormattedTextField(new MaskFormatter(
					"##/##/####"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		txtDataNascimento.setBounds(33, 279, 166, 20);
		contentPane.add(txtDataNascimento);
		txtDataNascimento.setColumns(10);

		txtEmail = new JTextField();
		txtEmail.setBounds(33, 339, 166, 20);
		contentPane.add(txtEmail);
		txtEmail.setColumns(10);

		txtRua = new JTextField();
		txtRua.setBounds(291, 213, 124, 20);
		contentPane.add(txtRua);
		txtRua.setColumns(10);

		txtNumero = new JTextField();
		txtNumero.setBounds(422, 213, 45, 20);
		contentPane.add(txtNumero);
		txtNumero.setColumns(10);

		txtBairro = new JTextField();
		txtBairro.setBounds(287, 148, 180, 20);
		contentPane.add(txtBairro);
		txtBairro.setColumns(10);

		txtCidade = new JTextField();
		txtCidade.setBounds(291, 84, 124, 20);
		contentPane.add(txtCidade);
		txtCidade.setColumns(10);

		try {
			txtTelefone = new JFormattedTextField(new MaskFormatter(
					"(##) ####-#####"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		txtTelefone.setBounds(291, 279, 176, 20);
		contentPane.add(txtTelefone);
		txtTelefone.setColumns(10);

		try {
			txtCep = new JFormattedTextField(new MaskFormatter("#####-###"));
		} catch (ParseException e3) {
			// TODO Auto-generated catch block
			e3.printStackTrace();
		}
		txtCep.setBounds(291, 339, 176, 20);
		contentPane.add(txtCep);
		txtCep.setColumns(10);

		JLabel lblEstado = new JLabel("Estado");
		lblEstado.setBounds(425, 71, 46, 14);
		contentPane.add(lblEstado);

		cboxEstado = new JComboBox();
		cboxEstado.setBounds(425, 83, 42, 22);
		cboxEstado.setModel(new DefaultComboBoxModel(new String[] { "", "AC",
				"AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT",
				"MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS",
				"RO", "RR", "SC", "SP", "SE", "TO" }));
		cboxEstado.setMaximumRowCount(27);
		contentPane.add(cboxEstado);
                /**
                 * Bot@@o buscar 
                 */
		btnBuscar = new JButton("Buscar");
                btnBuscar.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
				if (btnBuscar.getText().equals("Buscar")) {

					ControleCliente controleCliente = new ControleCliente();

					cliente.setCpf(txtCpf.getText());
					cliente.setNome(txtNome.getText());

					try {

						cliente = controleCliente.buscar(cliente).get(0);
						txtNome.setText(cliente.getNome());
						txtSobrenome.setText(cliente.getSobrenome());
						txtCpf.setText(cliente.getCpf());
						SimpleDateFormat sdf = new SimpleDateFormat(
								"dd/MM/yyyy");
						txtEmail.setText(cliente.getEmail());
						txtTelefone.setText(cliente.getTelefone());
						comboBoxTime.setSelectedItem(cliente.getTime());
						JOptionPane.showMessageDialog(null, "Cliente Encontrado");
						sexo = cliente.isSexo();

						localizacao.setIdLocalizacao(cliente.getLocalizacao()
								.getIdLocalizacao());
						localizacao = cliente.getLocalizacao();
						if (sexo) {
							rdbtnMasculino.setSelected(true);
							rdbtnFeminino.setSelected(false);
						} else {
							rdbtnMasculino.setSelected(false);
							rdbtnFeminino.setSelected(true);
						}

						for (int i = 0; i < cboxEstado.getItemCount(); i++) {
							if (cboxEstado.getItemAt(i).equals(
									cliente.getLocalizacao().getEstado())) {

								cboxEstado.setSelectedIndex(i);
							}

						}
						cboxEstado.setSelectedItem(cliente.getLocalizacao()
								.getEstado());

						txtBairro.setText(cliente.getLocalizacao().getBairro());
						txtCep.setText(cliente.getLocalizacao().getCep());
						txtRua.setText(cliente.getLocalizacao().getRua());
						txtNumero.setText(cliente.getLocalizacao().getNumero());
						cboxEstado.setSelectedItem(cliente.getLocalizacao()
								.getEstado());
						txtCidade.setText(cliente.getLocalizacao().getCidade());
						txtBairro.setEditable(false);
						comboBoxTime.setEditable(false);
						txtCep.setEditable(false);
						txtCidade.setEditable(false);
						txtDataNascimento.setEditable(false);
						txtEmail.setEditable(false);
						txtNome.setEditable(false);
						txtNumero.setEditable(false);
						txtRua.setEditable(false);
						txtSobrenome.setEditable(false);
						txtTelefone.setEditable(false);
						cboxEstado.setEnabled(false);
						rdbtnFeminino.setEnabled(false);
						rdbtnMasculino.setEnabled(false);
						btnCadastrar.setEnabled(false);
						btnExcluir.setEnabled(true);
						try {
							txtDataNascimento.setText(sdf.format(cliente
									.getNascimento()));

						} catch (Exception e2) {

						}
						btnBuscar.setText("Editar");

					} catch (Exception e1) {
						JOptionPane.showMessageDialog(null,
								"Cliente nao existe");
						// e1.printStackTrace();
						txtBairro.setEditable(true);
						comboBoxTime.setEnabled(true);
						txtCep.setEditable(true);
						txtCidade.setEditable(true);

						txtEmail.setEditable(true);
						txtNome.setEditable(true);
						txtNumero.setEditable(true);
						txtRua.setEditable(true);
						txtDataNascimento.setEditable(true);
						txtSobrenome.setEditable(true);
						txtTelefone.setEditable(true);
						cboxEstado.setEnabled(true);
						rdbtnFeminino.setEnabled(true);
						rdbtnMasculino.setEnabled(true);
						rdbtnMasculino.setSelected(false);
						rdbtnFeminino.setSelected(false);
						btnCadastrar.setEnabled(true);
						btnExcluir.setEnabled(false);
					}

				} else {
					txtBairro.setEditable(true);

					txtCep.setEditable(true);
					btnCadastrar.setEnabled(true);
					txtCidade.setEditable(true);
					txtDataNascimento.setEditable(true);
					txtEmail.setEditable(true);
					txtNome.setEditable(true);
					txtNumero.setEditable(true);
					txtRua.setEditable(true);
					comboBoxTime.setEnabled(true);
					txtDataNascimento.setEditable(true);
					txtSobrenome.setEditable(true);
					txtTelefone.setEditable(true);
					cboxEstado.setEnabled(true);
					rdbtnFeminino.setEnabled(true);
					rdbtnMasculino.setEnabled(true);
					btnExcluir.setEnabled(false);
					btnBuscar.setEnabled(false);
					btnCadastrar.setText("Salvar");

				}

			}
		});

		btnBuscar.setBounds(10, 462, 91, 23);
		contentPane.add(btnBuscar);
                /**
                 * Bot@@o casdastrar
                 */
		btnCadastrar = new JButton("Cadastrar");
		btnCadastrar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (btnCadastrar.getText().equals("Cadastrar")) {
					cliente = new Cliente();
					Localizacao localizacao = new Localizacao();
				}

				ControleCliente controleCliente = new ControleCliente();
				SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
				cliente.setNome(txtNome.getText());
				cliente.setSobrenome(txtSobrenome.getText());
				cliente.setTime((Time) comboBoxTime.getSelectedItem());
				cliente.setTelefone(txtTelefone.getText());
				cliente.setSenha(gerarSenhas.gerarSenha());
				cliente.setCpf(txtCpf.getText());
				cliente.setSexo(sexo);
				try {
					cliente.setNascimento(sdf.parse(txtDataNascimento.getText()));
				} catch (ParseException e2) {
					// TODO Auto-generated catch block
					e2.printStackTrace();
				}

				cliente.setEmail(txtEmail.getText());
				cliente.setTelefone(txtTelefone.getText());
				localizacao.setCep(txtCep.getText());
				localizacao.setRua(txtRua.getText());
				localizacao.setNumero(txtNumero.getText());
				localizacao.setEstado((String) cboxEstado.getSelectedItem());
				localizacao.setCidade(txtCidade.getText());
				localizacao.setBairro(txtBairro.getText());

				cliente.setLocalizacao(localizacao);
				if (!(rdbtnFeminino.isSelected())
						&& (!(rdbtnMasculino.isSelected()))) {
					
					JOptionPane.showMessageDialog(null, "Escolha um sexo");

				} else {
					try {

						controleCliente.salvar(cliente);
					} catch (Exception e1) {
						JOptionPane.showMessageDialog(null,
								"erro" + e1.getMessage());
						e1.printStackTrace();
					}
					Menu menu=new Menu() ;
					menu.abreTela(1, funcionario);
					menu.setVisible(true);
					dispose();

				}
			}

		});
		btnCadastrar.setBounds(127, 462, 91, 23);
		contentPane.add(btnCadastrar);

		JLabel lblSexo = new JLabel("Sexo");
		lblSexo.setBounds(33, 375, 46, 14);
		contentPane.add(lblSexo);

		rdbtnMasculino = new JRadioButton("Masculino");
		rdbtnMasculino.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				rdbtnMasculino.setSelected(true);
				rdbtnFeminino.setSelected(false);
				sexo = true;
			}
		});
		rdbtnMasculino.setBounds(27, 396, 109, 23);
		contentPane.add(rdbtnMasculino);

		rdbtnFeminino = new JRadioButton("Feminino");
		rdbtnFeminino.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				rdbtnFeminino.setSelected(true);
				rdbtnMasculino.setSelected(false);
				sexo = false;

			}
		});
		rdbtnFeminino.setBounds(27, 422, 109, 23);
		contentPane.add(rdbtnFeminino);
                /**
                 * Bot@@o Excluir
                 */
		btnExcluir = new JButton("Excluir");
		btnExcluir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				controle.excluir(cliente);
				JOptionPane.showMessageDialog(null,
						"Cliente Excluido com sucesso!");
				Menu menu = new Menu();
				menu.abreTela(1, funcionario);
				menu.setVisible(true);

			}
		});
		btnExcluir.setBounds(230, 462, 91, 23);
		contentPane.add(btnExcluir);

		comboBoxTime = new JComboBox();
		comboBoxTime.setBounds(291, 408, 176, 22);
		contentPane.add(comboBoxTime);

		JLabel lblTime = new JLabel("Time");
		lblTime.setBounds(291, 396, 46, 14);
		contentPane.add(lblTime);
		
		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Menu menu = new Menu();
				menu.abreTela(1, funcionario);
				menu.setVisible(true);
				dispose();
			}
		});
		btnCancelar.setBounds(344, 459, 117, 29);
		contentPane.add(btnCancelar);

	}
}
